package com.room.utils;

import com.room.pojo.User;
import org.springframework.security.core.context.SecurityContextHolder;

/**
 * @创建人 lin
 * @创建时间 2019/9/28
 * @描述
 */
public class UserUtils {
    public static User getCurrentUser(){
        // SecurityContextHolder是用来保存SecurityContext的。SecurityContext中含有当前正在访问系统的用户的详细信息
        // Spring Security使用一个Authentication对象来描述当前用户的相关信息
        //SecurityContextHolder中持有的是当前用户的SecurityContext，而SecurityContext持有的是代表当前用户相关信息的Authentic
        // ation的引用。这个Authentication对象不需要我们自己去创建，在与系统交互的过程中，Spring Security会自动为我们创建相应的Authentication对象，然后赋值给当前的SecurityContext。但是往往我们需要
        // 在程序中获取当前用户的相关信息，比如最常见的是获取当前登录用户的用户名。在程序的任何地方，通过如下方式我们可以获取到当前用户的用户名。
        //   通过Authentication.getPrincipal()可以获取到代表当前用户的信息，这个对象通常是UserDetails的实例。获取当前用户的用户名是一种比较常见的需求
        //   ，关于上述代码其实Spring Security在Authentication中的实现类中已经为我们做了相关实现，所以获取当前用户的用户名最简单的方式应当如下。
        return (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
    }
}
